package com.skivingcloud.admin.sys.service.impl;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.skivingcloud.admin.sys.entity.SysConfig;
import com.skivingcloud.admin.sys.mapper.SysConfigMapper;
import com.skivingcloud.admin.sys.service.SysConfigService;
import com.skivingcloud.common.utils.PageParameter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

/**
 *  服务层实现。
 *
 * @author skivingcloud
 * @since 2023-08-28
 */
@Service
public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements SysConfigService {
    
    /**
     * 分页查询
     *
     * @param parameter 分页信息
     * @return 结果
     */
    @Override
    public Page<SysConfig> queryByPage(PageParameter<SysConfig> parameter){
        Page<SysConfig> page = new Page<>(parameter.getPage(), parameter.getPageSize());
        SysConfig param = parameter.getParam();
        QueryWrapper queryWrapper = QueryWrapper.create().from(SysConfig.class);
        if(param != null){
            if(StringUtils.isNotBlank(param.getParamKey())){
                queryWrapper.and(SysConfig::getParamKey).like(param.getParamKey());
            }
            if(StringUtils.isNotBlank(param.getParamValue())){
                queryWrapper.and(SysConfig::getParamValue).like(param.getParamValue());
            }
            if(StringUtils.isNotBlank(param.getStatus())){
                queryWrapper.and(SysConfig::getStatus).eq(param.getStatus());
            }
            if(StringUtils.isNotBlank(param.getRemark())){
                queryWrapper.and(SysConfig::getRemark).like(param.getRemark());
            }
        }
        return this.page(page, queryWrapper);
    }
    
    /**
     * 根据参数编码获取参数值
     *
     * @param key 参数编码
     * @return 参数对象
     */
    @Override
    public SysConfig getConfigValueByKey(String key){
        QueryWrapper queryWrapper = QueryWrapper.create().where(SysConfig::getParamKey).eq(key);
        return this.mapper.selectOneByQuery(queryWrapper);
    }
}
